IB/FB - zjisteni pridani zaznamu v tabulce bez eventu - velke vytizeni procesoru

Otázka od: Ing. Jiri Sokol

11. 11. 2004 11:05

         procesoru
Ahoj panove!
Mam naprosto trivialni problem, ale nejak se mi nedari vyresit.
Mam tabulku, v te tabulce mam sloupec ID, nad kterym mam i index, a potrebuju v
aplikaci zjistit, ze v teto tabulce doslo k pridani zaznamu. Protoze pouzivam
FB server 1.5.1, o kterem se tady psalo, ze ma jeste nejake problemy s
eventama, chci tento ukol resit v aplikaci.
Tabulka ma za cca 3 mesice provozu uz okolo 450.000 -> za rok bude cca
1.800.000. Lze predpokladat, ze si zakaznici budou chtit v datech uchovavat dva
posledni roky -> musim to vyresit tak, aby to bezproblemu slapalo alespon pri
3.600.000 zaznamech...
Myslel jsem si, ze mi bude stacit zobrazit posledni zaznam a z nej si vytahnu
hodnotu ze sloupce ID. prikaz jsem mel napsan dobre, fungovalo to, ale ja to
potrebuju proklepavat tak cca 2/s - coz Firebirdovi zpusobi vytizeni na 90 a
vic procent  
Tak jsem si rikal, ze ma problem s tim, prejit na ten posledni zaznam. Tak jsem
zkusil zmenit prikaz z vyhledavani "last" na "max(id)", ale vysledek - vytizeni
FB serveru je porad nad 90%.
Muzete mi nekdo, prosim, poradit?
Diky
Jirka

P.S.:
"last":
select first (1) cas from tabulka order by id desc

"max(id)":
select max(id) from tabulka

K provedeni tech SQL dotazu pouzivam kompenentu IBSQL - udelam si prepare a pak
v timeru uz jenom provadim "ExecQuery".
--------------------------------------------------
Ing. Jiri Sokol; jiri.sokol@seznam.cz; 972 231 187
D6Prof+SP3; WinXPProf+SP1; FB 1.5.1
programator amater

Odpovedá: Petr Kralik

11. 11. 2004 12:03

         vytizeni procesoru
Hmmm,
Co kdybys mel dalsi tabulku, kam bys triggerem zapisoval nove ulozene
ID's.
Vlastni aplikaci bys pak cetl jen tuhle kratjou tabulku a zjistene ID's
bys po sebe mazal...
*krz

-----Original Message-----
From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz] On
Behalf Of Ing. Jiri Sokol
Sent: Thursday, November 11, 2004 11:06 AM
To: delphi-l@clexpert.cz
Subject: IB/FB - zjisteni pridani zaznamu v tabulce bez eventu - velke
vytizeni procesoru


Ahoj panove!
Mam naprosto trivialni problem, ale nejak se mi nedari vyresit. Mam
tabulku, v te tabulce mam sloupec ID, nad kterym mam i index, a
potrebuju v aplikaci zjistit, ze v teto tabulce doslo k pridani zaznamu.
Protoze pouzivam FB server 1.5.1, o kterem se tady psalo, ze ma jeste
nejake problemy s eventama, chci tento ukol resit v aplikaci. Tabulka ma
za cca 3 mesice provozu uz okolo 450.000 -> za rok bude cca 1.800.000.
Lze predpokladat, ze si zakaznici budou chtit v datech uchovavat dva
posledni roky -> musim to vyresit tak, aby to bezproblemu slapalo
alespon pri 3.600.000 zaznamech... Myslel jsem si, ze mi bude stacit
zobrazit posledni zaznam a z nej si vytahnu hodnotu ze sloupce ID.
prikaz jsem mel napsan dobre, fungovalo to, ale ja to potrebuju
proklepavat tak cca 2/s - coz Firebirdovi zpusobi vytizeni na 90 a vic
procent   Tak jsem si rikal, ze ma problem s tim, prejit na ten
posledni zaznam. Tak jsem zkusil zmenit prikaz z vyhledavani "last" na
"max(id)", ale vysledek - vytizeni FB serveru je porad nad 90%. Muzete
mi nekdo, prosim, poradit? Diky Jirka

P.S.:
"last":
select first (1) cas from tabulka order by id desc

"max(id)":
select max(id) from tabulka

K provedeni tech SQL dotazu pouzivam kompenentu IBSQL - udelam si
prepare a pak v timeru uz jenom provadim "ExecQuery".
--------------------------------------------------
Ing. Jiri Sokol; jiri.sokol@seznam.cz; 972 231 187
D6Prof+SP3; WinXPProf+SP1; FB 1.5.1
programator amater


Odpovedá: Karel Rys

11. 11. 2004 12:03

         vytizeni procesoru
Ing. Jiri Sokol dne 11 Nov 2004 v 11:05:

> Ahoj panove!
> Mam naprosto trivialni problem, ale nejak se mi nedari vyresit.
> Mam tabulku, v te tabulce mam sloupec ID, nad kterym mam i index, a
> potrebuju v aplikaci zjistit, ze v teto tabulce doslo k pridani
> zaznamu. Protoze pouzivam FB server 1.5.1, o kterem se tady psalo, ze
> ma jeste nejake problemy s eventama, chci tento ukol resit v aplikaci.
> Tabulka ma za cca 3 mesice provozu uz okolo 450.000 -> za rok bude cca
> 1.800.000. Lze predpokladat, ze si zakaznici budou chtit v datech
> uchovavat dva posledni roky -> musim to vyresit tak, aby to
> bezproblemu slapalo alespon pri 3.600.000 zaznamech... Myslel jsem si,
> ze mi bude stacit zobrazit posledni zaznam a z nej si vytahnu hodnotu
> ze sloupce ID. prikaz jsem mel napsan dobre, fungovalo to, ale ja to
> potrebuju proklepavat tak cca 2/s - coz Firebirdovi zpusobi vytizeni
> na 90 a vic procent   Tak jsem si rikal, ze ma problem s tim, prejit
> na ten posledni zaznam. Tak jsem zkusil zmenit prikaz z vyhledavani
> "last" na "max(id)", ale vysledek - vytizeni FB serveru je porad nad
> 90%. Muzete mi nekdo, prosim, poradit? Diky Jirka

Ahoj,

nesel by pouzit trigger after insert, ktery by do nejake jine, pomocne tabulky
zapsal
datum/cas/id, kdy doslo k te posledni zmene? aplikace by si tak datum/cas/id
posledniho zaznamu
vytahla primitivnim selectem skoro okamzite.

Karel Rys


Odpovedá: Daniel Frantik

11. 11. 2004 11:49

         vytizeni procesoru
Co treba udelat trigger nad tou tabulkou, ktery to nekam zapise?

Danik

> -----Original Message-----
> [mailto:delphi-l-owner@clexpert.cz] On Behalf Of Ing. Jiri Sokol
> vyresit. Mam tabulku, v te tabulce mam sloupec ID, nad kterym
> mam i index, a potrebuju v aplikaci zjistit, ze v teto
> tabulce doslo k pridani zaznamu. Protoze pouzivam FB server


Odpovedá: Tomas Michalik

11. 11. 2004 11:36

         vytizeni procesoru
Ing. Jiri Sokol wrote:

> Ahoj panove!
> Mam naprosto trivialni problem, ale nejak se mi nedari vyresit.
> Mam tabulku, v te tabulce mam sloupec ID, nad kterym mam i index, a potrebuju
v aplikaci zjistit, ze v teto tabulce doslo k pridani zaznamu. Protoze pouzivam
FB server 1.5.1, o kterem se tady psalo, ze ma jeste nejake problemy s
eventama, chci tento ukol resit v aplikaci.
> Tabulka ma za cca 3 mesice provozu uz okolo 450.000 -> za rok bude cca
1.800.000. Lze predpokladat, ze si zakaznici budou chtit v datech uchovavat dva
posledni roky -> musim to vyresit tak, aby to bezproblemu slapalo alespon pri
3.600.000 zaznamech...
> Myslel jsem si, ze mi bude stacit zobrazit posledni zaznam a z nej si vytahnu
hodnotu ze sloupce ID. prikaz jsem mel napsan dobre, fungovalo to, ale ja to
potrebuju proklepavat tak cca 2/s - coz Firebirdovi zpusobi vytizeni na 90 a
vic procent  
> Tak jsem si rikal, ze ma problem s tim, prejit na ten posledni zaznam. Tak
jsem zkusil zmenit prikaz z vyhledavani "last" na "max(id)", ale vysledek -
vytizeni FB serveru je porad nad 90%.
> Muzete mi nekdo, prosim, poradit?

Pri hledani maximalni hodnoty potrebujes descending index.
To by melo pomoct.

Tom

> Diky
> Jirka
>
> P.S.:
> "last":
> select first (1) cas from tabulka order by id desc
>
> "max(id)":
> select max(id) from tabulka

========================
Tomas Michalik
vyvoj IS

ProCA, spol. s r.o.
V Luzich 818
Praha 4 - Libus
140 00, Czech Republic

tel: +420 234646446
fax: +420 234646120

michalik@proca.cz
http://www.proca.cz

Odpovedá: Slavomir Skopalik

11. 11. 2004 12:32

         vytizeni procesoru
> Mam naprosto trivialni problem, ale nejak se mi nedari
> vyresit. Mam tabulku, v te tabulce mam sloupec ID, nad kterym
> mam i index, a potrebuju v aplikaci zjistit, ze v teto
> tabulce doslo k pridani zaznamu. Protoze pouzivam FB server
> 1.5.1, o kterem se tady psalo, ze ma jeste nejake problemy s

Proc nezkusis FB 1.5.2 (zatim sice pouze RC, ale asi bude prohlasen za
final) ?

> eventama, chci tento ukol resit v aplikaci. Tabulka ma za cca
> 3 mesice provozu uz okolo 450.000 -> za rok bude cca
> 1.800.000. Lze predpokladat, ze si zakaznici budou chtit v
> datech uchovavat dva posledni roky -> musim to vyresit tak,
> aby to bezproblemu slapalo alespon pri 3.600.000 zaznamech...
> Myslel jsem si, ze mi bude stacit zobrazit posledni zaznam a
> z nej si vytahnu hodnotu ze sloupce ID. prikaz jsem mel
> napsan dobre, fungovalo to, ale ja to potrebuju proklepavat
> tak cca 2/s - coz Firebirdovi zpusobi vytizeni na 90 a vic

2x za sekundu, neprehanis to trochu ?

> procent   Tak jsem si rikal, ze ma problem s tim, prejit na
> ten posledni zaznam. Tak jsem zkusil zmenit prikaz z
> vyhledavani "last" na "max(id)", ale vysledek - vytizeni FB
> serveru je porad nad 90%. Muzete mi nekdo, prosim, poradit? Diky Jirka

A neni jednodussi si udelat aplikacni server + UDF ?
Tohle periodicky dotazovani by mohlo serveru pekne zavarit.
Navic si dokazu predstavit situaci, kdy to selze.
Treba:
mas dva klienty (predpokladam, zi vice).
Kazdy z nich s vyzvedne cislo z generatoru, ale ten z vissim cislem ho
tam zapise
drive a ten z nizsim ho tam zapise pozdeji.
-> po ten druhy pripad NEVZNIKNE udalost.

 Slavek


Odpovedá: Richard Kejval

11. 11. 2004 13:01

         vytizeni procesoru
Petr Kralik pise :
> Co kdybys mel dalsi tabulku, kam bys triggerem zapisoval nove ulozene
>
ID's.
> Vlastni aplikaci bys pak cetl jen tuhle kratjou tabulku a zjistene ID's
> bys po sebe mazal...

Neni treba zadnou vytvaret, protoze uz existuje v RDB$Generators

S pozdravem
ing. Richard Kejval
mobil: 602477679
http://www.icsoftware.cz


Odpovedá: Petr Kralik

11. 11. 2004 13:56

         vytizeni procesoru
Pokud jde jen o posledni ID, lze to velice jednoduse

SELECT GEN_ID("nazev_generatoru", 0) FROM RDB$DATABASE;

Jestli bys pozadoval od event dalsi data, jako kdo to zapsal a
blablabla, ta externi tabulka by, dle meho nazoru, byla nejjdednodussim
resenim...

-----Original Message-----
From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz] On
Behalf Of Richard Kejval
Sent: Thursday, November 11, 2004 12:42 PM
To: delphi-l@clexpert.cz
Subject: Re: IB/FB - zjisteni pridani zaznamu v tabulce bez eventu -
velke vytizeni procesoru


Petr Kralik pise :
> Co kdybys mel dalsi tabulku, kam bys triggerem zapisoval nove ulozene
>
ID's. Vlastni aplikaci bys pak cetl jen tuhle kratjou tabulku a
> zjistene ID's
bys po sebe mazal...

Neni treba zadnou vytvaret, protoze uz existuje v RDB$Generators

S pozdravem
ing. Richard Kejval
mobil: 602477679
http://www.icsoftware.cz